/**
 * @(#)RecursosFinancierosManager.java Mar 18, 2007
 *
 * Copyright (c) 2005-2010 Psiqueware S.A. de C.V. All Rights Reserved.
 * This software is the proprietary information Psiqueware S.A. de C.V.
 * Use is subject to license terms.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *
 * <br/>Usuario : Psique
 * <br/>Creaci&oacute;n: Mar 18, 2007 - 2:16:08 PM
 * <br/>
 * <br/>
 * <br/><t5>Cambios :</t5>
 * <br/><b>Fecha | Autor  |  Cambios</b>
 * <ul>
 * <li>Mar 18, 2007 | <a href = "mailto:AngelElectrico@PsiqueWare.com">Psique</a> | Creaci&oacute;n del Objeto.</li>
 *
 * </ul>
 */

package com.psiqueware.jazmin.empresas.recursos.financieros;

import com.psiqueware.alheli.dao.EnlaceTransaccional;
import com.psiqueware.alheli.manager.BaseManagerInterface;
import com.psiqueware.alheli.manager.ManagerException;
import com.psiqueware.alheli.seguridad.Actividad;
import com.psiqueware.alheli.seguridad.UsuarioSeguridad;
import com.psiqueware.alheli.seguridad.SeguridadManagerFactory;
import com.psiqueware.tulipan.organizacional.Estructura;

import java.util.List;

/**
 * Encargado de administrar los recursosfinancieros.

 * <br/>Paquete Original: com.psiqueware.laVIE.empresas.recursos.financieros
 * <br/>Nombre  Original: RecursosFinancierosManager
 * <br/>Oprima para ver : <a href="RecursosFinancierosManager.java.html"><i>C&oacute;digo Fuente</i> </a>
 *
 * @author <a href="mailto:AngelElectrico@PsiqueWare.com">Psique</a>
 * @version Revision: 1.1 Mar 18, 2007 2:16:08 PM
 */
public interface RecursosFinancierosManager extends BaseManagerInterface
{

    /** Actividad para cuando se requiera cambiar la estructura financiera de una Empresa. */
    public static final Actividad s_cambiarRecursosFinancieros = SeguridadManagerFactory.getActividad ( "Capacidad para cambiar la estructura financiera de una Empresa.", RecursosFinancierosManager.class );


    /**
     * Crea una nueva {@link CentroCostos} y la agrega a la {@link Estructura}.
     * <br/>
     * Solo los {@link UsuarioSeguridad} que tengan el {@link Permiso} de {@link RecursosFinancierosManagerK#s_cambiarRecursosFinancieros}
     * podr&aacute;n alterar la estructura de la empresa y crearla.
     * <br/>
     * Solo se puede crear una {@link CentroCostos} para una clave dada en una misma {@link Estructura}.
     *
     * @param analistaFinanciero  {@link UsuarioSeguridad} que prentende realizar los cambios en la Empresa.
     * @param clave               para la {@link CentroCostos}. Dos claves no pueden repetirse enuna misma {@link Estructura}.
     * @param departamento        donde se pretende agregar la {@link CentroCostos}.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return {@link CentroCostos} con su clave, como parte del {@link Estructura}. Si el {@link UsuarioSeguridad} reestructurador no tienen el {@link Permiso} devuelve <code>null</code>.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException en caso de no poder completar la operaci&oacute;n.
     * @see #s_cambiarRecursosFinancieros
     */
    CentroCostos agregarCentroCostos ( UsuarioSeguridad analistaFinanciero, Estructura departamento, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Realiza la descripci&oacute;n de este {@link CentroCostos} asign&aacute;ndole una nueva clave.
     *
     * @param centrocostos        a describir.
     * @param clave               nueva a asignarle. No puede ser <code>null</code> ni vacio ni existir ya de alta dentro ese {@link Estructura} al que pertenece este {@link Centrocostos}.
     * @param analistaFinanciero  {@link UsuarioSeguridad} que va a realizar la operacion.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     *
     * @return <code>true</code> si se pudo realizar el cambio; <code>false</code> en caso contrario.
     *
     * @exception com.psiqueware.alheli.manager.ManagerException en caso de no poder completar la operaci&oacute;n.
     * @see #s_cambiarRecursosFinancieros
     * @noinspection CallToStringEqualsIgnoreCase,BooleanMethodNameMustStartWithQuestion
     */
    boolean describirCentroCostos ( UsuarioSeguridad analistaFinanciero, CentroCostos centrocostos, String clave, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;

    /**
     * Lista todos los {@link CentroCostos} asociados a una {@link Estructura}.
     * @param estructura cuyos {@link CentroCostos} se buscan.
     * @param enlaceTransaccional para asegurar la atomicidad de la transacci&oacute;n.
     * @return  {@link List} de {@link CentroCostos}, vacia si no se encuentran.
     * @throws ManagerException en caso de no poder completar la operaci&oacute;n.
     */
    List<CentroCostos> buscarCentrosCostos(Estructura estructura, EnlaceTransaccional enlaceTransaccional ) throws ManagerException;
}
